# @Filename:    iframe
# @Author:      王佳伟
# @Time:        2025-02-20 14:43
# @Describe:    iframe&frame切换
from datetime import time

from selenium import webdriver
from selenium.webdriver.common.by import By

class FindElement:
    def __init__(self):
        # 创建一个Chrome浏览器的WebDriver示例
        self.driver = webdriver.Chrome()
        # ChromeOptions类提供了对Chrome浏览器各种选项进行配置的方法;
        # 在excludeSwitches参数中，将enable-logging指定为要排除的选项，表示不启用浏览器的日志功能
        # options = webdriver.ChromeOptions()
        # options.add_experimental_option('excludeSwitches', ['enable-logging'])
        # self.drive = webdriver.Chrome(options=options)
        # 最大化窗口
        self.driver.maximize_window()
        # 隐式等待，设置最大的等待时长，只对查找元素（find_elementXXX）生效
        self.driver.implicitly_wait(2)

    def method(self):
        """代码执行"""
        # 通过get()方法打开网页
        self.driver.get('http://192.168.100.210/zentao/')

        '''
        1.先定位到需要切换的文档 — iframe&frame
        2.切换文档（切到frame中）：switch_to.frame()
        3.从子frame切回到父frame：switch_to.parent_frame()
        4.切换到最外层文档（从frame中切回主文档）：switch_to.default_content()
        '''

        # 登陆禅道
        self.driver.find_element(By.CSS_SELECTOR, '[id="account"]').send_keys("admin")
        time.sleep(1)
        self.driver.find_element(By.CSS_SELECTOR, '[name="password"').send_keys("123456")
        time.sleep(1)
        self.driver.find_element(By.CSS_SELECTOR, '[id="submit"]').click()
        time.sleep(1)
        # 切换方法如下：
        # 方法一
        # iframe = self.driver.find_elements_by_tag_name("iframe")[0]
        # self.driver.switch_to.frame(iframe)

        # 方法二
        # self.driver.switch_to.frame(0)

        # 方法三
        iframe = self.driver.find_element(By.CSS_SELECTOR, '#appIframe-my')
        self.driver.switch_to.frame(iframe)
        time.sleep(1)   # iframe切换，为提高成功率，最好是在操作后sleep(1)秒
        # 点击联系人
        self.driver.find_element(By.XPATH, '//*[@id="navbar"]/ul/li[5]/a').click()

        # 切换到最外层表单
        self.driver.switch_to.default_content()
        time.sleep(1)
        # 点击项目
        self.driver.find_element(By.CSS_SELECTOR, '#menu [data-app="project"]').click()


